import router, { loadModules } from "@/router";
import { clearToken, getToken } from "@/store/modules/user/utils";
import { ref } from "vue";
import { RouterMenu } from "./menu/types";
import { getRouters } from "./system/menu";
/* 全局菜单 */
export const menus = ref<RouterMenu[]>([]);

/* 退出 */
export const logout = () => {
  clearToken();
  router.push("/login");
};

/* 在两个地方调用：登录界面，main.ts */
export const renderRouters = async () => {
  /* 检测token */
  if (!getToken()) return;
  /* 加载服务器的路由 */
  const data = await getRouters();

  if (data?.code !== 200) return;
  menus.value = data.data;
  /* 本地的组件 */
  const routerList = loadModules();

  /* 递归遍历 */
  const recursiveTraversal = (data: RouterMenu[]) => {
    data.forEach((v) => {
      /* 处理当层的逻辑 */
      if ((!v.children || v.children.length === 0) && !v.component.includes("Layout")) {
        /* 这是服务器上的动态路由和本地的结合 */
        routerList.forEach((com) => {
          if (com.path.includes(v.component)) {
            router.addRoute("home", {
              path: v.path,
              component: com.component,
              name: v.name,
              meta: {
                ...v.meta
              }
            });
          }
        });
        /* 本地的组件 */
      }
      /* 遍历子级的方法 */
      if (v.children && v.children.length > 0) {
        recursiveTraversal(v.children);
      }
    });
  };

  recursiveTraversal(menus.value);
};
